
/*-------------------------------------------------------------------------
 *
 * mem.h
 *	  可移植性定义，用于各种内存操作
 *
 * Copyright (c) 2001-2022, PostgreSQL Global Development Group
 *
 * src/include/portability/mem.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef MEM_H
#define MEM_H

#define IPCProtection	(0600)	/* 仅用户可访问/修改 */

#ifdef SHM_SHARE_MMU			/* 在Solaris上使用密切协作的共享内存 */
#define PG_SHMAT_FLAGS			SHM_SHARE_MMU
#else
#define PG_SHMAT_FLAGS			0
#endif

/* Linux喜欢MAP_ANONYMOUS，但在其他系统上该标志称为MAP_ANON。 */
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS			MAP_ANON
#endif

/* 衍生自BSD的系统有MAP_HASSEMAPHORE，但在Linux上不存在（或不需要）。 */
#ifndef MAP_HASSEMAPHORE
#define MAP_HASSEMAPHORE		0
#endif

/*
 * 衍生自BSD的系统使用MAP_NOSYNC标志，以防止脏的mmap(2)
 * 页被随意刷新到磁盘。
 */
#ifndef MAP_NOSYNC
#define MAP_NOSYNC			0
#endif

#define PG_MMAP_FLAGS			(MAP_SHARED|MAP_ANONYMOUS|MAP_HASSEMAPHORE)

/* 一些非常旧的系统没有定义 MAP_FAILED。 */
#ifndef MAP_FAILED
#define MAP_FAILED ((void *) -1)
#endif

#endif							/* MEM_H */
